package com.example.siteservices.service.impl;

import com.example.siteservices.dto.LoginRequest;
import com.example.siteservices.entity.User;
import com.example.siteservices.mapper.UserMapper;
import com.example.siteservices.service.UserService;
import com.example.siteservices.util.EncrypDataUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * UserService的实现类
 * 提供用户相关服务的具体实现
 */
@Service
public class UserServiceImpl implements UserService {
    private String AES_KEY = "54bdd7ede1093292";
    private final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 用户仓库，用于访问用户数据
     */
    @Autowired
    private UserMapper userMapper;

    /**
     * SecretKey 对象
     */
    private byte[] secretKey;

    /**
     * 构造函数，初始化 SecretKey
     */
    public UserServiceImpl() {
        try {
            this.secretKey = AES_KEY.getBytes();
        } catch (Exception e) {
            throw new RuntimeException("Failed to initialize AES key", e);
        }
    }

    /**
     * 用户登录方法
     * 根据提供的登录请求检查用户名和密码是否匹配
     *
     * @param loginRequest 登录请求，包含用户名和密码
     * @return 如果登录成功返回true，否则返回false
     */
    @Override
    public boolean login(LoginRequest loginRequest) {
        // 根据用户名从数据库中查找用户
        User user = userMapper.findByUsername(loginRequest.getUsername());

        if (user == null) {
            logger.error("User not found for username: {}", loginRequest.getUsername());
            return false;
        }

        try {
            // 使用固定的key和iv值进行解密
            String fixedKey = "9152103b8a30c5c1";
            String fixedIv = "d55b644aadeee1e8";
            // 将Base64编码的密文转换为字节数组
            byte[] encryptedBytes = Base64.getDecoder().decode(loginRequest.getPassword());
            // 解密用户输入的密码
            byte[] decryptedBytes = EncrypDataUtil.decrypt(encryptedBytes, fixedKey.getBytes(), fixedIv.getBytes());
            String decryptedPassword = new String(decryptedBytes, StandardCharsets.UTF_8);

            // 分割出真实密码
            String[] parts = decryptedPassword.split("\\+");

            if (parts.length == 2) {
                String password = parts[1];
                // 对真实密码进行加密
                String encryptedPassword = EncrypDataUtil.encryptWithBase64(password, fixedKey.getBytes(), fixedIv.getBytes());
                // 直接比较解密后的密码与数据库中的密码
                return user.getPassword().equals(encryptedPassword);
            } else {
                logger.error("Encryption logic does not conform to specifications");
                return false;
            }
        } catch (Exception e) {
            logger.error("Error during password decryption for user: {}", loginRequest.getUsername(), e);
            return false;
        }
    }

    /**
     * 用户注册方法
     * 根据提供的注册请求注册新用户
     *
     * @param registerRequest 注册请求，包含用户名和密码
     * @return 如果注册成功返回true，否则返回false
     */
//    @Override
//    public boolean register(RegisterRequest registerRequest) {
//        try {
//            // 加密用户密码
//            String encryptedPassword = EncrypDataUtil.encryptWithAES(registerRequest.getPassword(), secretKey);
//            // 创建新用户对象
//            User user = new User();
//            user.setUsername(registerRequest.getUsername());
//            user.setPassword(encryptedPassword);
//            // 保存用户到数据库
//            userRepository.save(user);
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
}
